#include <stdio.h>
#include "ofc/DFixedPoint.h"

int main(int argc, char *argv[])
{
  DFixedPoint *fp1 = [DFixedPoint alloc];
  DFixedPoint *fp2 = [DFixedPoint new  ];
  DFixedPoint *fp3 = [DFixedPoint new  ];
  DText       *str;

  [fp1 init :75 :3];                   // Init with value 75 and 3 bits in the point

  [fp2 point :8];                      // Set the point for fixed point 2

  [fp2 set   :23];                     // Set the value (using the current point)

  str = [fp1 toText];                  // Convert to text
  printf("FixedPoint1 as double %f and string %s.\n", [fp1 toDouble], [str cstring]);
  [str free];

  str = [fp2 toText];
  printf("FixedPoint2 as double %f and string %s.\n", [fp2 toDouble], [str cstring]);
  [str free];
                                       // Calculations 
  [fp2 mul :fp1];                      // FixedPoint2 = FixedPoint2 * FixedPoint1

  [fp3 sub :fp2 :fp1];                 // FixedPoint3 = FixedPoint2 - FixedPoint1

  str = [fp3 toText];
  printf("FixedPoint3 as double %f and string %s.\n", [fp3 toDouble], [str cstring]);
  [str free];
                                       // Comparison
  if ([fp3 compare :fp1] == 0)
    printf("Fixedpoint3 is equal to fixedpoint1.\n");
  else
    if ([fp3 compare :fp1] < 0)
      printf("Fixedpoint3 is smaller than fixedpoint1.\n");
    else
      printf("Fixedpoint3 is greater than fixedpoint1.\n");

  [fp1 free];                          // Cleanup
  [fp2 free];
  [fp3 free];

  return 0;
}

